﻿using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using Fachada;
using ObjetoNegocio;

namespace CIRS.Algoritmos
{
    /// <summary>
    /// Interaction logic for UcBuscarAlgoritmo.xaml
    /// </summary>
    public partial class UcBuscarAlgoritmo
    {
        public UcBuscarAlgoritmo()
        {
            InitializeComponent();
            busca = new Busca();
            dgAtributos.ItemsSource =Fachada.ListarAtributosPorFiltro(new Atributo()); 
            atributos = new List<Atributo>();
        }

        public delegate void NotificarBusca(Busca busca,List<Algoritmo> algoritmos);
        public event NotificarBusca NotificarBuscaAlgoritmo;
        
        private Busca busca;
        private List<Atributo> atributos;

        private IFachada _fachada;
        public IFachada Fachada
        {
            get
            {
                if(_fachada == null)
                {
                    _fachada = new Fachada.Fachada();
                }
                return _fachada;
            }
        }

       
        private void btnBuscar_Click(object sender, RoutedEventArgs e)
        {
            busca.Data = DateTime.Now;
            busca.Atributos = atributos;
            busca.Usuario = FrmPrincipal.UsuarioLogado;
            var algoritmos = Fachada.PesquisarTop5Algoritmos(busca);
            if(NotificarBuscaAlgoritmo != null)
            {
                NotificarBuscaAlgoritmo(busca,algoritmos);
            }
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count > 0 && e.AddedItems[0] is Valor)
            {
                var atributo = (sender as ComboBox).Tag as Atributo;
                AdicionarAtributo(atributo, e.AddedItems[0] as Valor); 
            }
        }

        private void AdicionarAtributo(Atributo atributo,Valor valor)
        {
            if (atributo != null)
            {
                var items = atributos.FindAll(item => item.Codigo == atributo.Codigo);
                if (items.Count == 0)
                {
                    var temp = new Atributo
                                   {
                                       Codigo = atributo.Codigo,
                                       Descricao = atributo.Descricao,
                                       Nome = atributo.Nome,
                                       Valores = new List<Valor> { valor }
                                   };
                    atributos.Add(temp);
                }
                else
                {
                    items[0].Valores.Clear();
                    items[0].Valores.Add(valor);

                }
            }
        }
    }
}